package com.example.usercrud;

import com.example.usercrud.UserService;
import com.example.usercrud.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Scanner;

/**
 * 用户控制台类，提供用户交互界面
 * 通过控制台接收用户输入，并调用对应的服务方法执行操作
 */
@Component
public class UserConsole {

    // 注入用户服务，用于执行用户相关的操作
    @Autowired
    private UserService userService;

    // 使用Scanner读取控制台输入
    private final Scanner scanner = new Scanner(System.in);

    /**
     * 启动用户管理系统的控制台界面
     * 无限循环显示菜单并根据用户选择执行对应操作
     */
    public void start() {
        while (true) {
            showMenu();
            String choice = scanner.nextLine();

            switch (choice) {
                case "0" -> showAllUsers();
                case "1" -> createUser();
                case "2" -> deleteAllUsers();
                case "3" -> deleteUserById();
                case "4" -> showUserById();
                case "5" -> {
                    System.out.println("退出系统");
                    return;
                }
                default -> System.out.println("无效选项，请重新输入");
            }
        }
    }

    /**
     * 显示用户管理系统的菜单选项
     */
    private void showMenu() {
        System.out.println("\n ----用户管理系统----");
        System.out.println("0:显示所有用户");
        System.out.println("1:添加用户");
        System.out.println("2:删除所有用户");
        System.out.println("3:按ID删除用户");
        System.out.println("4:按ID查询用户");
        System.out.println("5:退出");
        System.out.print("请选择操作(0-5)：");
    }

    /**
     * 显示所有用户信息
     */
    private void showAllUsers() {
        userService.getAllUsers().forEach(System.out::println);
    }

    /**
     * 创建新用户
     * 通过控制台输入用户名、邮箱和密码，并调用服务创建用户
     */
    private void createUser() {
        System.out.print("请输入用户名：");
        String username = scanner.nextLine();

        System.out.print("请输入邮箱：");
        String email = scanner.nextLine();

        System.out.print("请输入密码：");
        String password = scanner.nextLine();

        User user = new User();
        user.setUsername(username);
        user.setEmail(email);
        user.setPassword(password);
        userService.createUser(user);
    }

    /**
     * 删除所有用户
     */
    private void deleteAllUsers() {
        userService.deleteAllUsers();
    }

    /**
     * 通过ID删除用户
     * 从控制台输入用户ID，并调用服务删除对应用户
     */
    private void deleteUserById() {
        System.out.print("请输入要删除的用户ID：");
        try {
            Long id = Long.valueOf(scanner.nextLine());
            userService.deleteUser(id);
        } catch (NumberFormatException e) {
            System.out.println("请输入有效的数字ID");
        }
    }

    /**
     * 通过ID显示用户信息
     * 从控制台输入用户ID，并调用服务获取并显示用户信息
     */
    private void showUserById() {
        System.out.print("请输入要查询的用户ID：");
        try {
            Long id = Long.valueOf(scanner.nextLine());
            User user = userService.getUserById(id);
            if (user != null) {
                System.out.println(user);
            } else {
                System.out.println("未找到该用户");
            }
        } catch (NumberFormatException e) {
            System.out.println("请输入有效的数字ID");
        }
    }
}
